package com.xadrez.view;

import com.xadrez.Principal;
import com.xadrez.modelo.Peca;
import com.xadrez.modelo.Posicao;
import com.xadrez.modelo.Tabuleiro;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

public class InicializadorView {

    //Inicializa cores do jogo. Esse método é importante a partir do momento que o jogador poderá escolher essas cores.
    public static void inicializaCores() {
        Cor.getInstance().mudaCores(Color.orange, Color.red, Color.yellow, Color.gray);
    }

    public static void inicializaTabuleiro(JLayeredPane layeredPane) {
        TabuleiroView tabuleiro = TabuleiroView.getInstance();

        tabuleiro.setCor(Cor.getInstance().getCorTabuleiro());

        layeredPane.add(tabuleiro, JLayeredPane.DEFAULT_LAYER);
        for (int i = 0; i < 64; i++) {
            JPanel square = new JPanel(new BorderLayout());
            tabuleiro.add(square);

            int row = (i / 8) % 2;
            if (row == 0) {
                square.setBackground(i % 2 == 0 ? tabuleiro.getCor() : Color.white);
            } else {
                square.setBackground(i % 2 == 0 ? Color.white : tabuleiro.getCor());
            }
        }

        inicializaMapaDePosicoes();
        adicionaPecas();
    }

    //Para cada posicao(x,y) do Tabuleiro(Modelo), ira criar atraves da classe MapeadorDePosicao, uma associacao com uma posicao(x,y) do Tabuleiro(View).
    private static void inicializaMapaDePosicoes() {
        int xView = 0;
        int yView = 0;
        for (int x = 0; x < 8; x++) {
            for (int y = 0; y < 8; y++) {
                if (xView > 525) {
                    xView = 0;
                    yView = yView + TabuleiroView.getInstance().TAMANHOQUADRADO;
                }
                MapeadorDePosicao mP = new MapeadorDePosicao(new Posicao(x, y), new Posicao(xView, yView));
                TabuleiroView.getInstance().getMapaDePosicoesVirtuais().add(mP);
                xView = xView + TabuleiroView.getInstance().TAMANHOQUADRADO;
            }
        }

    }

    //Recupera as pecas do Tabuleiro(Modelo) e as usa para criar as pecas do Tabuleiro(View)
    private static void adicionaPecas() {

        Tabuleiro tabuleiro = Principal.getTabuleiro();
        Peca[][] peca = tabuleiro.getQuadrados();

        //JOGADOR - TORRES
        adiciona(peca[7][0], 56, "preto");
        adiciona(peca[7][7], 63, "preto");
        //JOGADOR - CAVALOS
        adiciona(peca[7][1], 57, "preto");
        adiciona(peca[7][6], 62, "preto");
        //JOGADOR - BISPOS
        adiciona(peca[7][2], 58, "preto");
        adiciona(peca[7][5], 61, "preto");
        //JOGADOR - REI/RAINHA
        adiciona(peca[7][3], 59, "preto");
        adiciona(peca[7][4], 60, "preto");
        //JOGADOR - PEOES
        adiciona(peca[6][0], 48, "preto");
        adiciona(peca[6][1], 49, "preto");
        adiciona(peca[6][2], 50, "preto");
        adiciona(peca[6][3], 51, "preto");
        adiciona(peca[6][4], 52, "preto");
        adiciona(peca[6][5], 53, "preto");
        adiciona(peca[6][6], 54, "preto");
        adiciona(peca[6][7], 55, "preto");

        //COMPUTADOR - TORRES
        adiciona(peca[0][0], 0, "branco");
        adiciona(peca[0][0], 7, "branco");
        //COMPUTADOR - CAVALOS
        adiciona(peca[0][1], 1, "branco");
        adiciona(peca[0][6], 6, "branco");
        //COMPUTADOR - BISPOS
        adiciona(peca[0][2], 2, "branco");
        adiciona(peca[0][5], 5, "branco");
        //COMPUTADOR - REI/RAINHA
        adiciona(peca[0][3], 3, "branco");
        adiciona(peca[0][4], 4, "branco");
        //COMPUTADOR - PEOES
        adiciona(peca[1][0], 8, "branco");
        adiciona(peca[1][1], 9, "branco");
        adiciona(peca[1][2], 10, "branco");
        adiciona(peca[1][3], 11, "branco");
        adiciona(peca[1][4], 12, "branco");
        adiciona(peca[1][5], 13, "branco");
        adiciona(peca[1][6], 14, "branco");
        adiciona(peca[1][7], 15, "branco");
    }

    private static void adiciona(Peca peca, int posicao, String cor) {
        PecaView pecaView = new PecaView();

        pecaView.setImagem(new JLabel(new ImageIcon("./src/main/java/com/xadrez/view/grafico/" + cor + "_" + peca + ".gif")));
        pecaView.setPeca(peca);

        JPanel panel = (JPanel) TabuleiroView.getInstance().getComponent(posicao);
        panel.add(pecaView.getImagem());
        TabuleiroView.getInstance().getPecas().add(pecaView);
    }
}
